iT邦幫忙

0

JS 物件擴充的修改與調整 DAY69

  • 分享至 

  • xImage
  •  

物件擴充的修改與調整

是針對物件本身(請牢記!!)

  • preventExtensions (防止擴充)
  • seal (封裝)
  • Freeze (凍結)

preventExtensions 防止擴充

var family = {
    a: 1,
    b: 2,
    c: {},
}
// preventExtensions 防止擴充

console.log('是否可被擴充',Object.isExtensible(family)); // true
Object.preventExtensions(family);   
console.log('是否可被擴充',Object.isExtensible(family)); // false
// getOwnPropertyDescriptor 觀看物件屬性的特徵為何
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 特徵皆為true

// 調整屬性
family.a = 'a';

// 新增屬性
family.d = 'a'; // 無法新增

// 巢狀屬性調整
family.c.a = 'ca';

// 調整特徵
Object.defineProperty(family,'a',{
    configurable: false,
})

// 刪除
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));

seal 封裝

var family = {
    a: 1,
    b: 2,
    c: {},
}
// seal 封裝
// 物件物件屬性無法新增刪除,也無法重新配置特徵,但是可以調整目前屬性值
// seal 是 preventExtensions 加上 上述的限制

console.log('是否可被擴充',Object.isExtensible(family)); // true
Object.seal(family);   
console.log('是否可被擴充',Object.isExtensible(family)); // false
console.log('是否被封裝',Object.isSealed(family)); // true
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 這裡 configurable 為 false

// 調整屬性
family.a = 'a';

// 新增屬性
family.d = 'a'; // 無法新增

// 巢狀屬性調整
family.c.a = 'ca';

// 調整特徵  (無法調整 writable 一樣為true)
Object.defineProperty(family,'a',{
    writable: false,
})

// 刪除 (無法刪除)
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));

freeze 凍結

var family = {
    a: 1,
    b: 2,
    c: {},
}
// freeze 凍結
// 物件加上 seal , 並且無法調整值

Object.freeze(family);   
console.log('是否可被擴充',Object.isExtensible(family)); // false
console.log('是否被封裝',Object.isSealed(family)); // true
console.log('是否被凍結',Object.isFrozen(family)); // true
console.log('family a 的屬性特徵' , Object.getOwnPropertyDescriptor(family,'a'));
// 這裡 configurable writable 為 false

// 調整屬性
family.a = 'a';

// 新增屬性
family.d = 'a'; // 無法新增

// 巢狀屬性調整
family.c.a = 'ca';

// 調整特徵  (無法調整 會跳出錯誤)
// Object.defineProperty(family,'a',{
//     writable: true,
// })

// 刪除 (無法刪除)
delete family.b;
// 結果
console.log(family);
console.log('family a 屬性特徵(嘗試修改後)', Object.getOwnPropertyDescriptor(family,'a'));

那今天的介紹就到這裡
若有任何問題 或 內容有誤
都可以跟我說唷/images/emoticon/emoticon41.gif


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言